package org.example.controller;


import lombok.extern.slf4j.Slf4j;
import org.bson.types.ObjectId;
import org.example.entity.ChatMessageEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@RestController
@RequestMapping("/mongdb")
public class MongdbController {

    @Autowired
    private MongoTemplate mongoTemplate;    // mongdb操作模板, 操作数据库


    /**
     * 测试mongdb，插入数据
     * @return
     */
    @PostMapping("/insert")
    public ChatMessageEntity insert(Long userId, String message) {
        ChatMessageEntity chatMessageEntity = new ChatMessageEntity(); // 创建一个ChatMessage对象
        chatMessageEntity.setUserId(userId);
        chatMessageEntity.setMessage(message);
        ChatMessageEntity insert = mongoTemplate.insert(chatMessageEntity);
        log.info("插入数据：{}", insert);
        return insert;
    }

    /**
     * 测试mongdb，查询数据
     * @return
     */
    @PostMapping("/select")
    public ChatMessageEntity select(String ObjectId) {
        ChatMessageEntity chatMessageEntity = mongoTemplate.findById(new ObjectId(ObjectId), ChatMessageEntity.class);
        log.info("查询数据：{}", chatMessageEntity);
        return chatMessageEntity;
    }



    /**
     * 测试mongdb，更新数据
     * @return
     */
    @PostMapping("/update")
    public ChatMessageEntity update(String ObjectId, String message) {
        Criteria criteria = Criteria.where("_id").is(new ObjectId(ObjectId));   // 创建一个查询条件，根据id查询
        Query query = new Query(criteria);          // 创建一个查询对象，根据条件查询
        Update update = Update.update("message", message);      // 创建一个更新对象，更新message字段
        ChatMessageEntity save = mongoTemplate.findAndModify(query, update, ChatMessageEntity.class); // 查询并更新数据，返回更新前的数据
        log.info("更新数据：{}", save);
        log.info("更新的数据：{}", update);
        return save;
    }



    /**
     * 测试mongdb，删除数据
     * @return
     */
    @PostMapping("/delete")
    public ChatMessageEntity delete(String ObjectId) {
        Criteria criteria = Criteria.where("_id").is(new ObjectId(ObjectId));   // 创建一个查询条件，根据id查询
        Query query = new Query(criteria);          // 创建一个查询对象，根据条件查询
        ChatMessageEntity delete = mongoTemplate.findAndRemove(query, ChatMessageEntity.class); // 删除数据，返回删除的数据
        log.info("删除数据：{}", delete);
        return delete;
    }

}
